package com.labManage.dao;

import com.labManage.entity.Goods;
import com.labManage.vo.GoodsVo;
import com.labManage.vo.ResultVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface GoodsDao {
    /***************************************************************************************************************************
     *  @fn             selectGoodsByGoodsName
     *  @brief          根据物品的名称查找指定物品的信息
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的GoodsDao.xml文件中编写，一一对应
     *  @param[in]      String goodsName  指定物品的名称
     *  @return         Goods             物品的信息，包括物品名称、描述、库存数量和总数量等信息
     *  @author         杜健华，杜志华
     *  @date           2021.06.21
     ****************************************************************************************************************************/
    public Goods selectGoodsByGoodsName(String goodsName);

    /***************************************************************************************************************************
     *  @fn             insertGoods
     *  @brief          添加指定物品
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的GoodsDao.xml文件中编写，一一对应
     *  @param[in]      Goods goods       指定需要添加的物品
     *  @return         1  插入成功
     *                  0  插入失败
     *  @author         杜健华，杜志华
     *  @date           2021.06.21
     ****************************************************************************************************************************/
    public int insertGoods(Goods goods);

    /***************************************************************************************************************************
     *  @fn             updateGoods
     *  @brief          更新指定物品的信息
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的GoodsDao.xml文件中编写，一一对应
     *  @param[in]      Goods goods       指定需要更新的物品
     *  @return         1  更新成功
     *                  0  更新失败
     *  @author         杜健华，杜志华
     *  @date           2021.06.21
     ****************************************************************************************************************************/
    public int updateGoods(Goods goods);

    /***************************************************************************************************************************
     *  @fn             deleteGoods
     *  @brief          根据物品名称删除指定物品
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的GoodsDao.xml文件中编写，一一对应
     *  @param[in]      String goodsName       指定删除物品的名称
     *  @return         1  删除成功
     *                  0  删除失败
     *  @author         杜健华，杜志华
     *  @date           2021.06.21
     ****************************************************************************************************************************/
    public int deleteGoodsByGoodsName(String goodsName);

    /***************************************************************************************************************************
     *  @fn             selectGoodsRestByKindsIdAndGoodsState
     *  @brief          根据分类ID号统计该分类的总库存量
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的GoodsDao.xml文件中编写，一一对应
     *  @param[in]      Long kindsId       指定分类的ID号
     *  @return         int                指定分类的总库存量
     *  @author         杜健华，杜志华
     *  @date           2021.06.21
     ****************************************************************************************************************************/
    public int selectGoodsRestByKindsUsernameAndGoodsState(String kindsUsername);

    /***************************************************************************************************************************
     *  @fn             selectGoodsTotalByKingsId
     *  @brief          根据分类ID号统计该分类的总量
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的GoodsDao.xml文件中编写，一一对应
     *  @param[in]      Long kindsId       指定分类的ID号
     *  @return         int                指定分类的总量
     *  @author         杜健华，杜志华
     *  @date           2021.06.21
     ****************************************************************************************************************************/
    public int selectGoodsTotalByKindsId(Long kindsId);

    public List<Goods> selectAllGoodsByKindsId(String kindsId);

    public String selectGoodsNameById(Long id);

    public  List<Goods> selectGoods(@Param("startIndex") Integer startIndex,
                                    @Param("limit") Integer limit,
                                    @Param("condition")GoodsVo condition,
                                    @Param("kindsIdsList")List<Long> kindsIdsList);

    int deleteGoodsById(Long id);

    String selectKindsNameByGoodsId(Long goodsId);

    long selectGoodsNum(@Param("condition") GoodsVo condition,@Param("kindsIdsList") List<Long> kindsIdsList);

    long selectStoreGoodsNum();

    Goods selectGoodsById(Long goodsId);

    Goods selectGoodsByGoodsNo(String goodsNo);
}
